package Problem.project;
/*
     第二种解决线程安全的方法：同步方法
     解决思路：同步方法会把方法中的共享数据锁住，只让一个线程执行
              同步方法的锁对象是当前实现类对象，也就是this（一个对象一个this，唯一的）

     使用步骤：1.把访问的共享数据抽取出来放入到一个方法中
              2.在方法上添加synchronized修饰符

     格式：修饰符  synchronized  返回值类型  方法名（参数列表）{
               可能出现线程问题的代码（共享的数据）
     }

 */
public class MyProblem2 implements Runnable {
    private int ticket = 100;
    @Override
    public void run() {
        while (ticket>0){
            test();  //run（）方法中可以调用其他的方法，设定的线程任务也可以写在别的 方法中，在run（）方法中调用线程方法就好
        }
    }

    public synchronized void test() {  //同步方法
        if(ticket > 0){
            try {
                Thread.sleep(100); //睡眠100毫秒在启用线程
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("同步方法"+ticket+"张票");
            ticket--;

        }
     }
}